<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.9.0">
    <title>Choway Blog</title>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta name="description" content="七尘的个人博客">
    <meta name="keywords" content="java、python、SpringBoot、Hibernate">
    <link rel="shortcut icon" href="/images/favicon.ico">
    <link rel="stylesheet" href="/css/animate.min.css">
    <link rel="stylesheet" href="/css/bootstrap.min.css">
    <link rel="stylesheet" href="/css/font-awesome.min.css">
    <link rel="stylesheet" href="/css/kratos.diy.css">
    <link rel="stylesheet" href="/css/layer.min.css">
    <link rel="stylesheet" href="/css/superfish.min.css">
    <link rel="stylesheet" href="/css/style.css">
    <script src="/js/jquery.min.js"></script>
    <script src="/js/bootstrap.min.js"></script>
    <script src="/js/hoverIntent.min.js"></script>
    <script src="/js/jquery.easing.min.js"></script>
    <script src="/js/jquery.qrcode.min.js"></script>
    <script src="/js/jquery.stellar.min.js"></script>
    <script src="/js/jquery.waypoints.min.js"></script>
    <script src="/js/kratos.diy.js"></script>
    <script src="/js/kratos.js"></script>
    <script src="/js/layer.min.js"></script>
    <script src="/js/modernizr.min.js"></script>
    <script src="/js/superfish.js"></script>
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/atom-one-dark.min.css">
    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/highlight.min.js"></script>
    <script type="text/javascript">
      hljs.initHighlightingOnLoad();
    </script>
</head>


<body data-spy="scroll" data-target=".scrollspy">
    <div id="kratos-wrapper">
        <div id="kratos-page">
            <div id="kratos-header">
    <header id="kratos-header-section">
        <div class="container">
            <div class="nav-header">
                <a href="#" class="js-kratos-nav-toggle kratos-nav-toggle"><i></i></a>
                <h1 id="kratos-logo"><a href="/">Choway Blog</a></h1>
                
                <nav id="kratos-menu-wrap">
                  <ul id="kratos-primary-menu" class="sf-menu">
                  
                    <li>
                      <a href="/categories/Java/">Java</a>
                    </li>
                  
                    <li>
                      <a href="/categories/DevOps/">DevOps</a>
                    </li>
                  
                  </ul>
                </nav>
            </div>
        </div>
    </header>
</div>

<div class="kratos-start kratos-hero-2 kratos-post-header">
    <div class="kratos-overlay kratos-post" style="background:#222831"></div>
</div>
            
            <div id="kratos-blog-post" style="background:#f5f5f5;">
                <div class="container">
                    <div class="row">
                        <section id="main" class="col-md-8">
                            <!--  文章模板  -->
<article>
    <div class="kratos-hentry kratos-post-inner clearfix">
        <header class="kratos-entry-header">
            <h1 class="kratos-entry-title text-center">JVM 内存区域</h1>
            <div class="kratos-post-meta text-center">
                <span>
                    <i class="fa fa-commenting-o"></i> choway
                    <i class="fa fa-calendar"></i> 2018-12-11 09:23:46
                    <i class="fa fa-eye"></i> 
                    
                        <a class="category-link" href="/categories/Java/">Java</a><a class="category-link" href="/categories/Java/JVM/">JVM</a>
                    
                </span>
            </div>
        </header>
        <div class="kratos-post-content">
            <p>Java 虚拟机（JVM）在执行 Java 程序时会把它管理的内存划分为多个不同的数据区域。这些区域各有用途，以及创建和销毁的时间。有些内存区域随着虚拟机进程的启动而存在，有些区域则依赖用户线程的启动和结束而建立和销毁。</p>
<a id="more"></a>
<h2 id="程序计数器（Program-Counter-Register）"><a href="#程序计数器（Program-Counter-Register）" class="headerlink" title="程序计数器（Program Counter Register）"></a>程序计数器（Program Counter Register）</h2><p>由于 JVM 的多线程是通过线程切换并分配处理器执行时间的方式来实现的，所以在任何一个时刻，一个处理器（多核CPU的一个内核）都只会执行一条线程，线程切换后为了确保每个线程能恢复到正确的执行位置，每个线程都需要有个独立的程序计数器。</p>
<ul>
<li>线程私有；</li>
<li>唯一一个在 JVM 规范中没有规定任何 OutOfMemoryError 的区域；</li>
</ul>
<h2 id="JVM-栈（JVM-Stacks）"><a href="#JVM-栈（JVM-Stacks）" class="headerlink" title="JVM 栈（JVM Stacks）"></a>JVM 栈（JVM Stacks）</h2><p>Java 方法在执行时会创建一个栈帧（Stack Frame）用于存储局部变量表、操作数栈、动态链接、方法出口等信息；<br>每个方法从调用到执行结束，对应一个栈帧在 JVM 栈中的入栈到出栈过程；<br>如果线程请求的栈深度大于 JVM 所允许的深度，将抛出 StackOverflowError；<br>如果 JVM 栈可以动态扩展，如果扩展时无法申请到足够的内存，就会抛出 OutOfMemoryError；</p>
<ul>
<li>线程私有；</li>
<li>在 JVM 规范会抛出 StackOverflowError、OutOfMemoryError；</li>
</ul>
<h4 id="栈溢出（StackOverflowError）"><a href="#栈溢出（StackOverflowError）" class="headerlink" title="栈溢出（StackOverflowError）"></a>栈溢出（StackOverflowError）</h4><p>在 HotSpot 虚拟机中并不区分虚拟机栈和本地方法栈，栈容量使用 -Xss 参数设定；</p>
<h2 id="JVM-堆（JVM-Heap）"><a href="#JVM-堆（JVM-Heap）" class="headerlink" title="JVM 堆（JVM Heap）"></a>JVM 堆（JVM Heap）</h2><p>JVM 堆是被所有线程共享的内存区域，在虚拟机启动时创建；<br>JVM 规范：所有的对象实例以及数组都在堆上分配；<br>堆是垃圾回收器管理的主要区域，因此也被称为 GC 堆；<br>如果在堆中没有内存完成实例分配，并且堆也无法扩展，则抛出 OutOfMemoryError；</p>
<ul>
<li>线程共享；</li>
<li>在 JVM 规范会抛出 OutOfMemoryError；</li>
</ul>
<h4 id="堆溢出（OutOfMemoryError，简称-OOM）"><a href="#堆溢出（OutOfMemoryError，简称-OOM）" class="headerlink" title="堆溢出（OutOfMemoryError，简称 OOM）"></a>堆溢出（OutOfMemoryError，简称 OOM）</h4><ul>
<li>-Xms 设定堆最小值，即初始化堆大小；</li>
<li>-Xmx 设定堆最大值，当堆内存不够时，堆大小会自动扩展，直到达到堆最大值；<br>-Xms 和 -Xmx 设置一样可避免堆自动扩展；</li>
</ul>
<h2 id="方法区（Method-Area）"><a href="#方法区（Method-Area）" class="headerlink" title="方法区（Method Area）"></a>方法区（Method Area）</h2><p>方法区用于存储已被 JVM 加载的类信息、常量、静态变量、即使编译器编译后的代码等数据，各个线程共享；<br>该区域的内存回收目标主要针对常量池的回收和类型卸载；</p>
<ul>
<li>线程共享；</li>
<li>在 JVM 规范中，当方法区无法满足内存分配，则抛出 OutOfMemoryError；</li>
</ul>
<h4 id="运行时常量池（Runtime-Constant-Pool）"><a href="#运行时常量池（Runtime-Constant-Pool）" class="headerlink" title="运行时常量池（Runtime Constant Pool）"></a>运行时常量池（Runtime Constant Pool）</h4><p>常量池是方法区的一部分，也会抛出 OutOfMemoryError；<br>Class 文件除了有类的版本、字段、方法、接口等描述信息外，还有常量池用户存放编译期的各种字面量和符合引用，这些内容在类加载后进入方法区的运行时常量池中存放。</p>
<h4 id="方法区、常量池溢出"><a href="#方法区、常量池溢出" class="headerlink" title="方法区、常量池溢出"></a>方法区、常量池溢出</h4><p>-XX:PermSize 和 -XX:MaxPermSize 设定方法区大小；</p>
<h2 id="直接内存（Direct-Memory）"><a href="#直接内存（Direct-Memory）" class="headerlink" title="直接内存（Direct Memory）"></a>直接内存（Direct Memory）</h2><p>直接内存不是 JVM 运行时数据的一部分，也不是 JVM 规范中定义的内存。<br>在 JDK 1.4 中新加入了 NIO（New Input/Output）类，引入了一种基于通道（Channel）与缓冲区（Buffer）的 IO 方式，它可以直接使用 Native 库直接分配堆外内存。</p>
<ul>
<li>-XX:MaxDirectMemorySize 参数指定直接内存大小；</li>
<li>如果不指定，默认与 -Xmx 值一样；</li>
</ul>

        </div>
        <footer class="kratos-entry-footer clearfix">
            <div class="post-like-donate text-center clearfix" id="post-like-donate">

            </div>
            <div class="footer-tag clearfix">
                <div class="pull-left">
                    <i class="fa fa-tags"></i>
                    
                        <a class="tag-link" href="/tags/hotspot/">hotspot</a><a class="tag-link" href="/tags/java/">java</a><a class="tag-link" href="/tags/jvm/">jvm</a>
                    
                </div>
            </div>
        </footer>
    </div>
    <div class="kratos-hentry kratos-copyright text-center clearfix">
        <img alt="知识共享许可协议" src="/images/licenses.png">
        <h5>本作品采用 <a rel="license nofollow" target="_blank" href="http://creativecommons.org/licenses/by-sa/4.0/">知识共享署名-相同方式共享 4.0 国际许可协议</a> 进行许可</h5>
    </div>

    
    <nav class="navigation post-navigation clearfix" role="navigation">
        
        <div class="nav-previous clearfix">
            <a title="centos7 安装 docker" href="/centos7-install-docker.html">&lt; 上一篇</a>
        </div>
        
        
    </nav>
    
</article>
                        </section>

                        <aside id="kratos-widget-area" class="col-md-4 hidden-xs hidden-sm scrollspy">
                            <div id="sidebar">
    <aside id="kratos_about-2" class="widget amadeus_about clearfix">
        <div class="photo-background">
            <div class="photo-background" style="background:url(/images/about_bg.jpg) no-repeat center center; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover;"></div>
        </div>
        <div class="photo-wrapper clearfix">
            <div class="photo-wrapper-tip text-center">
                <a href="/"><img class="about-photo" src="/images/about_me.jpg" /></a>
            </div>
        </div>
        <div class="textwidget">
            <p style="text-align: center;font-weight:400;">Choway Blog<br />七尘的个人博客</p>
        </div>
    </aside>

    
    <aside class="widget clearfix">
        <h4 class="widget-title">文章目录</h4>
        <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#程序计数器（Program-Counter-Register）"><span class="toc-text">程序计数器（Program Counter Register）</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#JVM-栈（JVM-Stacks）"><span class="toc-text">JVM 栈（JVM Stacks）</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#栈溢出（StackOverflowError）"><span class="toc-text">栈溢出（StackOverflowError）</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#JVM-堆（JVM-Heap）"><span class="toc-text">JVM 堆（JVM Heap）</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#堆溢出（OutOfMemoryError，简称-OOM）"><span class="toc-text">堆溢出（OutOfMemoryError，简称 OOM）</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#方法区（Method-Area）"><span class="toc-text">方法区（Method Area）</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#运行时常量池（Runtime-Constant-Pool）"><span class="toc-text">运行时常量池（Runtime Constant Pool）</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#方法区、常量池溢出"><span class="toc-text">方法区、常量池溢出</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#直接内存（Direct-Memory）"><span class="toc-text">直接内存（Direct Memory）</span></a></li></ol>
    </aside>
    

    
    <aside class="widget clearfix">
        <h4 class="widget-title">文章分类</h4>
        <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/DevOps/">DevOps</a><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/DevOps/ActiveMQ/">ActiveMQ</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/DevOps/Docker/">Docker</a></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/Java/">Java</a><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/Java/JVM/">JVM</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Java/SpringBoot/">SpringBoot</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Java/SpringCloud/">SpringCloud</a></li></ul></li></ul>
    </aside>
    

    
    <aside class="widget clearfix">
        <h4 class="widget-title">标签聚合</h4>
        <div class="tag_clouds">
            <a class="tag-link" href="/tags/activemq/">activemq</a><a class="tag-link" href="/tags/centos/">centos</a><a class="tag-link" href="/tags/docker/">docker</a><a class="tag-link" href="/tags/hotspot/">hotspot</a><a class="tag-link" href="/tags/java/">java</a><a class="tag-link" href="/tags/jms/">jms</a><a class="tag-link" href="/tags/jvm/">jvm</a><a class="tag-link" href="/tags/redis/">redis</a><a class="tag-link" href="/tags/spring-cloud/">spring cloud</a><a class="tag-link" href="/tags/springboot/">springboot</a>
        </div>
    </aside>
    

</div>
                        </aside>
                    </div>
                </div>
            </div>

            <footer>
    <div id="footer">
        <div class="cd-tool visible-lg text-center">
            <a class="cd-top cd-is-visible cd-fade-out"><span class="fa fa-chevron-up"></span></a>
        </div>
        <div class="container">
            <div class="row">
                <div class="col-md-6 col-md-offset-3 footer-list text-center">
                    <p class="kratos-social-icons">
                        <a target="_blank" rel="nofollow" href="https://github.com/choway"><i class="fa fa-github"></i></a>
                    </p>
                    <p>Copyright 2020 <a href="/">Choway Blog</a>. All Rights Reserved.
                </div>
            </div>
        </div>
    </div>
</footer>
        </div>
    </div>
</body>
</html>